package sf.database.jdbc.sql;

import sf.common.wrapper.Page;
import sf.dsl.Example;

import java.sql.Connection;
import java.util.List;
import java.util.Map;

/**
 * 按example操作
 */
public interface CrudExampleInf {
    /**
     * @param conn
     * @param start
     * @param limit
     * @param beanClass
     * @param example
     * @param <T>
     * @return
     */
    <T> Page<T> selectPage(Connection conn, long start, int limit, Class<T> beanClass, Example example);

    /**
     * @param conn
     * @param example
     * @return
     * @
     */
    Object[] selectArray(Connection conn, Example example);

    /**
     * @param conn
     * @param beanClass
     * @param example
     * @param <T>
     * @return
     * @
     */
    <T> List<T> selectList(Connection conn, Class<T> beanClass, Example example);

    /**
     * @param conn
     * @param beanClass
     * @param start
     * @param limit
     * @param example
     * @param <T>
     * @return
     */
    <T> List<T> selectList(Connection conn, Class<T> beanClass, long start, int limit, Example example);


    /**
     * @param conn
     * @param beanClass
     * @param example
     * @param <T>
     * @return
     */
    <T> List<T> selectListForUpdate(Connection conn, Class<T> beanClass, Example example);

    /**
     * @param conn
     * @param beanClass
     * @param example
     * @param <T>
     * @return
     * @
     */
    <T> T selectOne(Connection conn, Class<T> beanClass, Example example);

    /**
     * @param conn
     * @param beanClass
     * @param example
     * @param <T>
     * @return
     */
    <T> T selectOneForUpdate(Connection conn, Class<T> beanClass, Example example);

    /**
     * @param conn
     * @param example
     * @return
     * @
     */
    List<Map<String, Object>> select(Connection conn, Example example);

}
